# -*- coding: utf-8 -*-
from django.core import urlresolvers
from django.db import models
from model_utils.models import InheritanceCastModel



class Coordenada(models.Model):
    latitud = models.FloatField()
    longitud = models.FloatField()
    def get_absolute_url(self):
        return urlresolvers.reverse('localidades:coordenada_update', args=(self.pk,))
    def __unicode__(self):
        return u'Lat: %s, Long: %s' % (self.latitud,self.longitud)
    def get_latitud(self):
        abs_latitud = abs(self.latitud)
        hora = int(abs_latitud)
        minuto = int((abs_latitud - hora)*60)
        segundo = (abs_latitud - hora)*60
        este_oeste = 'O'
        if self.latitud > 0:
            este_oeste = 'E'
        return u'º%s "%s \'%s %s' % (hora,minuto,segundo,este_oeste)
    def get_longitud(self):
        abs_longitud = abs(self.longitud)
        hora = int(abs_longitud)
        minuto = int((abs_longitud - hora)*60)
        segundo = (abs_longitud - hora)*60
        norte_sur = 'S'
        if self.latitud > 0:
            norte_sur = 'N'
        return u'º%s "%s \'%s %s' % (hora,minuto,segundo,norte_sur)



class Localidad(models.Model):
    nombre = models.CharField(max_length=100,verbose_name = '* Nombre de Localidad')
    #campo estatico (por ahora) Tipo de localidad
    TIPO_DE_LOCALIDAD_CHOICES = (
        ('P', 'País'),
        ('D', 'Departamento/Provincia'),
        ('C', 'Ciudad'),
    )
    tipo = models.CharField(max_length=1, choices=TIPO_DE_LOCALIDAD_CHOICES)
    
    #relacion con Localidad, pais no tiene padre, departamento hijo de pais, ciudad hijo de departamento
    padre = models.ForeignKey('Localidad',blank=True,null=True)
    
    def __unicode__(self):
        return self.nombre
    
    def get_absolute_url(self):
        return urlresolvers.reverse('localidades:localidad_update', args=(self.pk,))


class Lugar(InheritanceCastModel):
    nombre = models.CharField(max_length=100)
    
    def get_absolute_url(self):
        return urlresolvers.reverse('localidades:lugar_update', args=(self.pk,))
    
    """def en_detalle_html(self):
        datos = [
                #u'Nombre: %s' % self.nombre,
                u'Nivel: %s' % self.nivel,
                u'Posición: %s' % self.posicion,  
                ]
        return datos"""
    
    def __unicode__(self):
        return self.nombre
    
    def object_real_name(self):
        if self.cast()._meta.verbose_name == 'pais':
            return u'País'
        elif self.cast()._meta.verbose_name == 'departamento provincia':
            return u'Departamento/Provincia'
        elif self.cast()._meta.verbose_name == 'ciudad':
            return u'Ciudad'
        elif self.cast()._meta.verbose_name == 'region':
            return u'Región'
    
class Pais(Lugar):
    def get_absolute_url(self):
        return urlresolvers.reverse('localidades:pais_update', args=(self.pk,))
    
class DepartamentoProvincia(Lugar):
    pais = models.ForeignKey(Pais,
                             verbose_name='País')
    TIPO_DE_DIVISION_DE_PAIS = (
        ('D', 'Departamento'),
        ('P', 'Provincia'),
        ('E', 'Estado'),
    )
    tipo = models.CharField(max_length=1, choices=TIPO_DE_DIVISION_DE_PAIS,
                            blank=True,null=True,
                            verbose_name='Tipo de División de País')

    def get_absolute_url(self):
        return urlresolvers.reverse('localidades:departamento_provincia_update', args=(self.pk,))
    
class Ciudad(Lugar):
    departamento_provincia = models.ForeignKey(DepartamentoProvincia, 
                                               verbose_name = 'Departamento/Provincia')
    
    def get_absolute_url(self):
        return urlresolvers.reverse('localidades:ciudad_update', args=(self.pk,))
    
class Region(Lugar):
    ciudad = models.ForeignKey(Ciudad)
    
    def get_absolute_url(self):
        return urlresolvers.reverse('localidades:region_update', args=(self.pk,))